package il.ac.bgu.cs.heuristics.graph.types;

import java.util.List;
import java.util.Set;

/**
 * 
 * @author Ronen Pinko
 * 
 */
public interface IPath {

	/**
	 * returns the weight of the path
	 * 
	 * (move to concrete implementation returns the number of action edges in
	 * the path)
	 */
	int weight();

	/**
	 * returns the set of substitutions which are necessary for taking the path
	 */
	Set<ISubstitution> getConstraints();

	/**
	 * returns a list of actions which form the path.
	 */
	List<IAction> getActions();

	/**
	 * returns a state represanting the merged states in the path example: if
	 * the path is: t__ -> f__ -> _tt->_f_->_ff then the end state will be fff
	 */
	IState getExtendedGoalState();

	// return true if the path contradicts itself because of the
	// non-contradicting edges.
	boolean isContradictingPath();
}
